/*
 * Copyright (c) 2007, Nubo Technologies
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
 *
 *    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
 *    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
 *    * Neither the name of the Nubo Technologies nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

package com.nubotech.gwt.oss.client.util;

import com.google.gwt.i18n.client.DateTimeFormat;
import java.util.Date;

/**
 *
 * @author jonnakkerud
 */
public class DateUtils {
    public static final String HTTP_DATE_PATTERN = "EEE, d MMM yyyy HH:mm:ss";

    // 2006-02-03T16:45:09.000Z    
    public static final String ISO_DATE_PATTERN = "yyyy-MM-dd'T'HH:mm:ss";
    
    public static Date parseISODate(String raw) {
        String s = raw.substring(0, raw.lastIndexOf("."));
        DateTimeFormat formatter = DateTimeFormat.getFormat(ISO_DATE_PATTERN);
        return formatter.parse(s);        
    }
    
    public static String formatISODate(Date date) {
        DateTimeFormat formatter = DateTimeFormat.getFormat(ISO_DATE_PATTERN);
        String retval = formatter.format(date) + ".000Z";
        return retval;
    }
    
    public static String formatHTTPDate(Date date) {
        date.setTime(date.getTime() + (date.getTimezoneOffset() * 60000)); 
        DateTimeFormat formatter = DateTimeFormat.getFormat(HTTP_DATE_PATTERN);
        return formatter.format(date) + " GMT";        
    }
    
    public static Date parseHTTPDate(String s) {
        // gwt date formater has a problem with TZ as GMT
        // Sun, 09 Nov 2008 02:36:32 GMT
        String ps = null;
        if (s.indexOf("GMT") > 0) {
            ps = s.substring(0, s.indexOf("GMT"));
            ps = ps.trim();
        }
        else {
            ps = s;
        }        
        DateTimeFormat formatter = DateTimeFormat.getFormat(HTTP_DATE_PATTERN);
        return formatter.parse(ps);        
    }
    
    public static Date farFutureDate() {
        Date d = new Date();
        long t = d.getTime() + (86400000*365); // + 1 yr
        d.setTime(t);
        return d;
    }
    
    public static Date today() {
        Date date = new Date();
        date.setTime(date.getTime()+86400000);
        date.setTime(date.getTime() + (date.getTimezoneOffset() * 60000));
        return date;
    }
    
}
